package gestorvideoclub.jdbc;

import gestorvideoclub.Proveedor;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class ProveedorJDBC{
    public static void altaProveedor(Proveedor proveedor)
    {
        Connection con = null;
        Statement st = null;
        String sql = "insert into proveedores (nombreEmpresa, cif, domicilioFiscal, provincia, telefono, cp, estadoProveedor) values ";
        sql +="('"+proveedor.getNombreEmpresa()+"', '"+proveedor.getCIF()+"', '"+proveedor.getDireccionFiscal()+"'";
        sql +=", '"+proveedor.getProvincia()+"', '"+proveedor.getTelefono()+"', '"+proveedor.getCp()+"'";
        sql +=", '"+proveedor.getEstado()+"')";
        //System.out.println(sql);
        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            st.executeUpdate(sql);
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al insertar un nuevo proveedor "+e.getMessage());
        }
        finally{
            AccesoDatos.cerrarConexion(con);
        }
    }

    public static ArrayList<Proveedor> consultarProveedores(){
        String sql = "select * from proveedores order by nombreEmpresa";
        ArrayList<Proveedor> listaProveedores = new ArrayList<Proveedor>();
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            while(rs.next()){
                Proveedor pr = new Proveedor();
                pr.setIdProveedor(rs.getInt("Id"));
                pr.setNombreEmpresa(rs.getString("nombreEmpresa"));
                pr.setCIF(rs.getString("cif"));
                pr.setDireccionFiscal(rs.getString("domicilioFiscal"));
                pr.setProvincia(rs.getString("provincia"));
                pr.setTelefono(rs.getString("telefono"));
                pr.setCp(rs.getString("cp"));
                pr.setEstado(rs.getString("estadoProveedor"));
                listaProveedores.add(pr);
            }
            rs.close();
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al hacer la consulta de proveedores "+e.getMessage());
        }
        finally{
            AccesoDatos.cerrarConexion(con);
        }
        return listaProveedores;
    }
    /*
     * @author Rafa
     *
     * metodo utilizado para mostrar en altas de producto solo proveedores activos 
     */
    public static ArrayList<Proveedor> consultarProveedoresAlta(){
        String sql = "select * from proveedores where proveedores.estadoProveedor='Alta' order by nombreEmpresa";
        ArrayList<Proveedor> listaProveedores = new ArrayList<Proveedor>();
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            while(rs.next()){
                Proveedor pr = new Proveedor();
                pr.setIdProveedor(rs.getInt("Id"));
                pr.setNombreEmpresa(rs.getString("nombreEmpresa"));
                pr.setCIF(rs.getString("cif"));
                pr.setDireccionFiscal(rs.getString("domicilioFiscal"));
                pr.setProvincia(rs.getString("provincia"));
                pr.setTelefono(rs.getString("telefono"));
                pr.setCp(rs.getString("cp"));
                pr.setEstado(rs.getString("estadoProveedor"));
                listaProveedores.add(pr);
            }
            rs.close();
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al hacer la consulta de proveedores "+e.getMessage());
        }
        finally{
            AccesoDatos.cerrarConexion(con);
        }
        return listaProveedores;
    }
    
    

    public static ArrayList<Proveedor> buscarProveedorPorNombre(String nombreEmpresa)
    {
        String sql = "select * from proveedores where nombreEmpresa like '%"+nombreEmpresa+"%'";
        ArrayList<Proveedor> listaProveedores = new ArrayList<Proveedor>();
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            while(rs.next()){
                Proveedor pr = new Proveedor();
                pr.setIdProveedor(rs.getInt("Id"));
                pr.setNombreEmpresa(rs.getString("nombreEmpresa"));
                pr.setCIF(rs.getString("cif"));
                pr.setDireccionFiscal(rs.getString("domicilioFiscal"));
                pr.setProvincia(rs.getString("provincia"));
                pr.setTelefono(rs.getString("telefono"));
                pr.setCp(rs.getString("cp"));
                pr.setEstado(rs.getString("estadoProveedor"));
                listaProveedores.add(pr);
            }
            rs.close();
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al hacer la consulta de proveedores "+e.getMessage());
        }
        finally{
            AccesoDatos.cerrarConexion(con);
        }
        return listaProveedores;
    }


    public static void modificarProveedor(Proveedor proveedor)
    {
        String sql = "update proveedores set ";
        sql += " nombreEmpresa ='"+proveedor.getNombreEmpresa()+"'";
        sql += ", domicilioFiscal ='"+proveedor.getDireccionFiscal()+"'";
        sql += ", provincia ='"+proveedor.getProvincia()+"'";
        sql += ", telefono ='"+proveedor.getTelefono()+"'";
        sql += ", cp = '"+proveedor.getCp()+"'";
        sql += ", estadoProveedor = '"+proveedor.getEstado()+"'";
        sql += " where Id = "+proveedor.getIdProveedor();

        //System.out.println(sql);

        Connection con = null;
        Statement st = null;
        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            st.executeUpdate(sql);
            st.close();
            System.out.println("La modificacion se ha realizado correctamente");
        }
        catch(Exception e){
            System.out.println("Error al modificar el proveedor "+e.getMessage());
        }
        finally{
            AccesoDatos.cerrarConexion(con);
        }
    }
    public static int BuscaIdProveedor(String cif){
        ArrayList<Proveedor> listaP=consultarProveedores();
        int idT=-1;
        for(Proveedor p: listaP){
            if(p.getNombreEmpresa().compareTo(cif)==0)
            idT=p.getIdProveedor();
        }
        return idT;
    }
    /**
     * Este método sirve para comprobar si existe un proveedor o no
     * @param cif del proveedor que queremos comprobar si existe
     * @return devolverá el número de proveedores que hay en la base de datos con el mismo cif
     */
    public static int existeProveedor(String cif){
        String sql = "select count(*) as num from proveedores where proveedores.cif = '"+cif+"'";
        //System.out.println(sql);
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;
        int numero = -1;
        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            rs.next();
            numero = rs.getInt("num");
            rs.close();
            st.close();
        }
        catch(Exception e){
            System.out.println("Error al comprobar si existe proveedor "+e.getMessage());
        }

        AccesoDatos.cerrarConexion(con);
        return numero;
    }
    public static Proveedor obtenerProveedor(String cif){
        Proveedor proveedor = new Proveedor();
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        String sql = "select * from proveedores where cif='"+cif+"'";
        
        
        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            rs.next();
            proveedor.setIdProveedor(rs.getInt("Id"));
            proveedor.setCIF(rs.getString("cif"));
            proveedor.setNombreEmpresa(rs.getString("nombreEmpresa"));
            proveedor.setDireccionFiscal(rs.getString("domicilioFiscal"));
            proveedor.setProvincia(rs.getString("provincia"));
            proveedor.setTelefono(rs.getString("telefono"));
            proveedor.setCp(rs.getString("cp"));
            proveedor.setEstado(rs.getString("estadoProveedor"));
        }catch(Exception e){
            System.out.println("Error al obtener el proveedor "+e.getMessage());
        }

        AccesoDatos.cerrarConexion(con);
        return proveedor;
    }

    public static Proveedor obtenerProveedorPorId(int idProveedor){
        Proveedor proveedor = new Proveedor();
        String sql = "select * from proveedores where Id ="+idProveedor;
        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try{
            con = AccesoDatos.getConexion();
            st = con.createStatement();
            rs = st.executeQuery(sql);
            while(rs.next()){
                proveedor = new Proveedor();
                proveedor.setIdProveedor(idProveedor);
                proveedor.setNombreEmpresa(rs.getString("nombreEmpresa"));
                proveedor.setCIF(rs.getString("cif"));
                proveedor.setDireccionFiscal(rs.getString("domicilioFiscal"));
                proveedor.setProvincia(rs.getString("provincia"));
                proveedor.setTelefono(rs.getString("telefono"));
                proveedor.setCp(rs.getString("cp"));
                proveedor.setEstado(rs.getString("estadoProveedor"));
            }
        }
        catch(Exception e){
            System.out.println("Error al obtener el proveedor por su identificador "+e.getMessage());
        }
        AccesoDatos.cerrarConexion(con);
        return proveedor;
    }
}

